
// 1.引入 axios  vue  qs
import Vue from "vue"
import axios from "axios"
import qs from "qs"

// 引入api.js文件中的登录检测提示方法
import { isLogin } from "./api.js"

// 2.后端服务地址：
// 1.测试服务器：http://localhost:3000   2.生产服务器:https://api.aslegou.top
// 怎么识别 测试环境还是生产环境？
// npm  run serve:(测试环境)
// npm  run build(生产环境)
if (process.env.NODE_ENV == "development") {
    Vue.prototype.$pre = "http://localhost:3000"
    // 为了测试方便使用线上地址 
    // Vue.prototype.$pre = "https://api.aslegou.top"
} else {
    Vue.prototype.$pre = "https://api.aslegou.top"
}

// 3.通过axios配置项设置请求的基础域名地址(不使用代理)
axios.defaults.baseURL = Vue.prototype.$pre


// 4.设置axios请求拦截
axios.interceptors.request.use((config) => {
    // 只要用户登录，在请求header头中追加token
    let memberInfo = localStorage.getItem('memberInfo') || ""
    if (memberInfo != "") {
        config.headers.authorization = JSON.parse(memberInfo).token
    }
    // 注意一定要返回 config
    return config
})

// 5.设置axios响应拦截
axios.interceptors.response.use((res) => {
    // console.log('我是响应拦截器：',res)
    // 根据后端返回的不同状态码进行不同响应处理
    if (res.data.code == 200) {
        // 正常返回请求数据 触发调用位置的.then()方法
        return Promise.resolve(res)
    } else if (res.data.code == 403) {
        // 登录过期（或者是访问的接口地址错误）
        // 1.清除缓存中的会员信息
        localStorage.removeItem("memberInfo")
        // 2.提示用户请登录
        isLogin()
        // 3.返回失败结果 触发调用位置的.catch
        return Promise.reject(res)
    } else if (res.data.code == 500) {
        // 请求参数有误 触发调用位置的.catch
        return Promise.reject(res)
    }
})

/**
 * 5.封装get请求方法
 * data:{
 *      url:"请求地址"
 *      params:{请求参数}
 * }
 * return:返回一个promise对象
*/
export const getData = (url, params = {}) => {
    // 返回是一个promise对象
    return axios.get(url, { params })
}

/**
 * 6.封装post请求方法
 * data:{
 *      url:"请求地址"
 *      params:{请求参数}
 *      isFile:bool 是否有文件上传
 * }
 * return:返回一个promise对象
*/
export const postData = (url, params, isFile = false) => {

    let data = null;
    if (isFile) {
        // 1.有文件上传 FormData  mutiparty/form-data...
        data = new FormData()
        for (let key in params) {
            data.append(key, params[key])
        }
    } else {
        // 2.无文件上传 qs x-www-form-url....
        data = qs.stringify(params)
    }

    // 返回是一个promise对象
    return axios.post(url, data)
}



